﻿#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

//int main()
//{
//	int a = -10;
//	//-10存放在整型当中，是4个字节，32bit位
//	//-10的原码：1000000000000000000000000000001010
//	//-10的反码：1111111111111111111111111111110101
//	//-10的补码：1111111111111111111111111111110110
//
//	int b = 0;
//	//10的原码：0000000000000000000000000000001010
//	//10的反码：0000000000000000000000000000001010
//	//10的补码：0000000000000000000000000000001010
//
//	return 0;
//}


//1-1
//1+(-1)

//1:的原码反码补码00000000000000000000000000000001
//-1：的原码10000000000000000000000000000001
//-1：的反码11111111111111111111111111111110
// 
//-1：的补码：11111111111111111111111111111111
//1:的补码:  00000000000000000000000000000001
//          00000000000000000000000000000000


//int main()
//{
//	int num = 6;
//	//00000000000000000000000000000110 -- 原码反码补码
//	//00000000000000000000000000001100
//	int b = num << 1;
//	printf("%d\n", num);
//	printf("%d\n", b);
//
//	return 0;
//}


//int main()
//{
//	int num = -6;
//	//10000000000000000000000000000110 -- 原码
//	//11111111111111111111111111111001 -- 反码
//	//11111111111111111111111111111010 -- 补码
//	//11111111111111111111111111110100 -- 向左移动一位
//	// 
//	//10000000000000000000000000001011
//	//10000000000000000000000000001100
//	//
//	int b = num << 1;
//	printf("%d\n", num);
//	printf("%d\n", b);
//
//	return 0;
//}

//& 按位与
//int main()
//{
//	int a = 3;
//	//00000000000000000000000000000011  -- 原码补码反码
//	int b = -5;
//	//10000000000000000000000000000101  --原码
//	//11111111111111111111111111111010  --反码
//	//11111111111111111111111111111011  --补码
//	int c = a & b;
//	//00000000000000000000000000000011
//	//11111111111111111111111111111011
//	//00000000000000000000000000000011   3
//
//	int d = a | b;
//	//00000000000000000000000000000011
//	//11111111111111111111111111111011
//	//11111111111111111111111111111011  -- 补码
//	//10000000000000000000000000000100
//	//10000000000000000000000000000101  -5
//
//	//按位异或：相同为0，相异为1
//	int f = a ^ b;
//	//00000000000000000000000000000011
//	//11111111111111111111111111111011
//	//11111111111111111111111111111000  -- 补码
//	//10000000000000000000000000000111
//	//10000000000000000000000000001000  -8
//
//	printf("%d\n", c);//3
//	printf("%d\n", d);//-5
//	printf("%d\n", f);//-8
//
//	return 0;
//}


//int main()
//{
//	//不能创建临时变量（第三个变量），实现两个整数的交换。
//	int a = 10;
//	int b = 20;
//	int temp = 0;
//	printf("交换前：a=%d,b=%d\n", a, b);
//	temp = a;
//	a = b;
//	b = temp;
//	printf("交换后：a=%d,b=%d\n", a, b);
//	return 0;
//}


//int main()
//{
//	int a = 10;
//	int b = 20;
//	printf("交换前：a = %d,b = %d\n", a, b);
// //这个代码可能会有数据溢出的情况
//	a = a + b;
//	b = a - b;
//	a = a - b;
//	printf("交换后：a = %d,b = %d\n", a, b);
//
//	return 0;
//}


//int main()
//{
//	int a = 10;
//	int b = 20;
//	printf("交换前：a = %d,b = %d\n", a, b);
//	a = a ^ b;
//	//b = a^b^b=a
//	b = a ^ b;
//	//a = a^ a^b = b
//	a = a ^ b;
//	printf("交换后：a = %d,b = %d\n", a, b);
//
//	return 0;
//}


//int main()
//{
//	//编写代码实现：求⼀个整数存储在内存中的⼆进制中1的个数
//	//在十进制当中，是利用了取余和做除可以得到每一位的数字
//	//二进制当中同理可以利用对2取余的方式
//	//15 
//	//00000000000000000000000000001111
//
//	unsigned int n = 0;
//	scanf("%d", &n);
//	int count = 0;
//	while (n)
//	{
//		if (n % 2 != 0)
//		{
//			count++;
//		}
//		n = n / 2;
//	}
//	printf("2进制中1的个数为：%d\n", count);
//
//	return 0;
//}


//int main()
//{
//	//求⼀个整数存储在内存中的⼆进制中1的个数
//	//00000000000000000000000000001111
//	//00000000000000000000000000000001  count++
//	int n = 0;
//	scanf("%d", &n);
//	int count = 0;
//	for (int i = 1; i <= 32; i++)
//	{
//		if (n & (1 << i))
//		{
//			count++;
//		}
//	}
//	printf("%d\n", count);
//
//
//	return 0;
//}


//int main()
//{
//	//编写代码将13⼆进制序列的第5位修改为1，然后再改回0
//
//	//00000000000000000000000000001101
//	//00000000000000000000000000010000 
//	//00000000000000000000000000011101
//	// 
//	//00000000000000000000000000011101 
//	//11111111111111111111111111101111 
//	//00000000000000000000000000001101
//	
//	int n = 13;
//	n = n | (1 << 4);
//	printf("%d\n", n);
//
//	n = n & ~(1 << 4);
//	printf("%d\n", n);
//
//	return 0;
//}

//int get_one_count(int n)
//{
//	int count = 0;
//	while (n)
//	{
//		count++;
//		n = n & (n - 1);
//	}
//	return count;
//}
//
//int main()
//{
//	//写一个函数返回参数二进制中1的个数。
//	int n = 0;
//	scanf("%d", &n);
//	int ret = get_one_count(n);
//	printf("%d\n", ret);
//
//	return 0;
//}